using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.SGI.ERP.Entidades;
using MakeIT.SGI.ERP.Negocios;

namespace MakeIT.SGI.ERP.Apresentacao
{
    public partial class CadastroCliente : System.Web.UI.Page
    {

        UsuarioVO usuarioVO = null;
        protected SgiDAOT SgiDAOT = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            this.SgiDAOT = new SgiDAOT();
            usuarioVO = (UsuarioVO)this.Session["userActive"];

            if (!IsPostBack)
            {
                Util.HabilitarCampos(false, this.panelCad);
                carregaFilial();
                ddlCadFilial_SelectedIndexChanged(null, null);
            }

        }

        protected void Page_Unload(object sender, EventArgs e)
        {
            try
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.closeDAO();
            }
            catch (Exception ex) { }
        }

        protected void grvResultado_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.grvResultado.PageIndex = e.NewPageIndex;
            btnPesquisa_Click(null, null);
        }
        protected void atualizarDdlIdPessoa(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaPessoa(this.SgiDAOT, this.ddlCadIdPessoa, txtCadPesquisarPessoa.Text, Convert.ToInt32(ddlCadFilial.SelectedValue));

            CarregaDDL.carregaPessoa(this.SgiDAOT, this.ddlIdPessoa, Convert.ToInt32(ddlIdFilial.SelectedValue));

        }

        protected void carregaFilial()
        {
            CarregaDDL.carregaFilial(this.SgiDAOT, ddlCadFilial);

            CarregaDDL.carregaFilial(this.SgiDAOT, ddlIdFilial);

        }

        /// <summary>
        /// Manipula o evento do botão btnSalvar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {

            //Declara objetos
            ClienteVO clienteVO = null;
            bool novoRegistro = false;

            try
            {
                //Verifica se o ID é nulo, se sim = cadastro novo
                if (string.IsNullOrEmpty(this.txtCadIdCliente.Text))
                {
                    clienteVO = ClienteVO.CreateVO();
                    clienteVO.cadastro = DateTime.Now;
                    clienteVO.cadastradoPor = usuarioVO.user;

                    novoRegistro = true;

                }
                //Recupera dados para serem alterados
                else
                {
                    //Recupera dados
                    clienteVO = this.SgiDAOT.getCliente(Int32.Parse(this.txtCadIdCliente.Text));
                }

                clienteVO.idPessoa = Int32.Parse(this.ddlCadIdPessoa.SelectedValue);
                clienteVO.edicao = DateTime.Now;
                clienteVO.editadoPor = usuarioVO.user;

                //Chama metodo para salvar ou criar novo registro
                if (novoRegistro)
                    clienteVO.idCliente = (int)this.SgiDAOT.newCliente(clienteVO);
                else
                    this.SgiDAOT.setCliente(clienteVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Atualiza formulario, apos salvar os dados
                this.txtCadIdCliente.Text = clienteVO.idCliente.ToString();
                this.ltCadastradoPor.Text = clienteVO.cadastradoPor;
                this.ltEditadoPor.Text = clienteVO.editadoPor;
                this.ltDataCadastro.Text = clienteVO.cadastro.ToString("dd/MM/yyyy");
                this.ltDataEdicao.Text = clienteVO.edicao.ToString("dd/MM/yyyy");

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do botão btnPesquisa
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnPesquisa_Click(object sender, EventArgs e)
        {

            //Declara objetos
            int? idCliente = null;
            int? idPessoa = null;

            try
            {

                if (!string.IsNullOrEmpty(this.txtIdCliente.Text))
                {
                    idCliente = Int32.Parse(this.txtIdCliente.Text);
                }

                if (!this.ddlIdPessoa.SelectedValue.Equals("-1"))
                {
                    idPessoa = Int32.Parse(this.ddlIdPessoa.SelectedValue);
                }


                //Recupera a lista de registros segundo a pesquisa
                this.grvResultado.DataSource = this.SgiDAOT.getClientes(idCliente, idPessoa);

                //Vincula os dados
                this.grvResultado.DataBind();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do botão btnCancelar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            //Volta para a tab page de pesquisa
            //this.tabCliente.ActiveTabIndex = 0;

            btnPesquisarPessoa.Enabled = false;

            // Desabilita os campos para edição
            Util.HabilitarCampos(false, this.panelCad);

            // Destrava botão de edição
            this.btnEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadIdCliente.Text));

            // Destrava botão de exclusao
            this.btnExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadIdCliente.Text));

            // Detrava botão de novo
            this.btnNovo.Enabled = true;

            // Desabilita o botão salvar
            this.btnSalvar.Enabled = false;

        }

        protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            ClienteVO clienteVO = null;
            int idCliente = 0;

            try
            {
                //Recupera os argumentos com o ID do objeto
                string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
                idCliente = Int32.Parse(argumentos[0]);

                //Recupera o objeto
                clienteVO = this.SgiDAOT.getCliente(idCliente);

                this.txtCadIdCliente.Text = clienteVO.idCliente.ToString();

                clienteVO.idPessoaVO = this.SgiDAOT.getPessoa(clienteVO.idPessoa);

                this.ddlCadFilial.SelectedValue = Convert.ToString(clienteVO.idPessoaVO.idFilial);
                this.txtCadPesquisarPessoa.Text = clienteVO.idPessoaVO.pessoa;
                atualizarDdlIdPessoa(null, null);

                this.ddlCadIdPessoa.SelectedValue = clienteVO.idPessoa.ToString();
                this.ltCadastradoPor.Text = clienteVO.cadastradoPor;
                this.ltEditadoPor.Text = clienteVO.editadoPor;
                this.ltDataCadastro.Text = clienteVO.cadastro.ToString("dd/MM/yyyy");
                this.ltDataEdicao.Text = clienteVO.edicao.ToString("dd/MM/yyyy");

                btnPesquisarPessoa.Enabled = false;

                //Habilita tab page do cadastro
                this.tabCliente.ActiveTabIndex = 1;

                //Desabilita campos para edição
                Util.HabilitarCampos(false, this.panelCad);

                //Desabilita botão salvar
                this.btnSalvar.Enabled = false;

                //Habilita botão editar
                this.btnEditar.Enabled = true;

                //Habilita botão excluir
                this.btnExcluir.Enabled = true;

                //Habilita botão novo
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        // <summary>
        // Manipula o evento editar do web form
        // </summary>
        // <param name="sender">Objeto disparador de evento</param>
        // <param name="e">Argumento do evento</param>
        protected void btnEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelCad);

            btnPesquisarPessoa.Enabled = true;

            // Trava apenas os text box da PK
            this.txtCadIdCliente.Enabled = false;

            // Trava botão de edição
            this.btnEditar.Enabled = false;

            // Trava botão de exclusao
            this.btnExcluir.Enabled = false;

            // Trava botão de novo
            this.btnNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnSalvar.Enabled = true;

        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.panelCad);
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelCad);

            this.ltCadastradoPor.Text = "";
            this.ltEditadoPor.Text = "";
            this.ltDataCadastro.Text = "";
            this.ltDataEdicao.Text = "";

            atualizarDdlIdPessoa(null, null);

            btnPesquisarPessoa.Enabled = true;

            // Trava apenas os text box da PK
            this.txtCadIdCliente.Enabled = false;

            // Trava botão de edição
            this.btnEditar.Enabled = false;

            // Trava botão de exclusao
            this.btnExcluir.Enabled = false;

            // Trava botão de novo
            this.btnNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnSalvar.Enabled = true;

        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            //Declara objetos
            ClienteVO clienteVO = null;

            try
            {
                //Cria objeto
                clienteVO = ClienteVO.CreateVO();
                clienteVO.idCliente = Int32.Parse(this.txtCadIdCliente.Text);

                //verifica se tem contrato dependentes deste registro
                if (this.SgiDAOT.getCountContratoxIdCliente(clienteVO.idCliente) > 0)
                {
                    Util.ExibeAlert(this, "Há Contrato(s) associado(s) a este registro. Exclusão não permitida");
                    return;
                }

                //Chama metodo para excluir registro
                this.SgiDAOT.delCliente(clienteVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro excluido com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";

                btnPesquisarPessoa.Enabled = false;

                // Trava botão de edição
                this.btnEditar.Enabled = false;

                // Trava botão de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o botão salvar
                this.btnSalvar.Enabled = false;

                // Habilita o botao novo
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }

        }

        protected void btnPesquisarPessoa_Click(object sender, EventArgs e)
        {
            if (!String.IsNullOrEmpty(txtCadPesquisarPessoa.Text) && !ddlCadFilial.SelectedValue.Equals("-1"))
                atualizarDdlIdPessoa(null, null);
            else
                Util.ExibeAlert(this, "Informe a pessoa e a filial para a pesquisa!");
        }

        protected void ddlCadFilial_SelectedIndexChanged(object sender, EventArgs e)
        {
            atualizarDdlIdPessoa(null, null);
        }

    }
}
